//////////////////////////////////////////////////////////////////////////////////////////
// AbelMarcelSimulation.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.	 //
//																						                                          //
// Datum:			24.04.2012															                                 //
// Autor:			Abel, Marcel														                                 //
//////////////////////////////////////////////////////////////////////////////////////////

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <random>

const int WELT_Y = 100;
const int WELT_X = 80;
const int MIN_Y = 0;
const int MAX_Y = 99;
const int MIN_X = 0;
const int MAX_X = 79;

/* Testreihe mit einer Welt von 10x8 */
//const int WELT_Y = 10;
//const int WELT_X = 8;
//const int MIN_Y = 0;
//const int MAX_Y = 9;
//const int MIN_X = 0;
//const int MAX_X = 7;


void printAbelMarcelSimulation()
{
	int Welt[WELT_Y][WELT_X];
	int nachbarn, i, x1, x2, y;

	// Erste Zeile mit Zufallswerten (gerade oder ungerade) initialisieren
	srand((unsigned int) time(NULL));
	 i = 0;
	for (int j = MIN_X; j <= MAX_X; j++)
	{
		Welt[i][j] = rand() % 2;
	}

	// Nachbarn einer Zelle ermitteln, Start bei 2. Zeile
	for (int i = 1; i <= MAX_Y; i++)
	{
		for (int j = MIN_X; j <= MAX_X; j++)
		{
			nachbarn = 0;
			y = i - 1;

			switch (j)
			{
			case MIN_X:		x1 = j;
							x2 = j + 2;
							break;
			case 1:			x1 = j - 1;
							x2 = j + 2;
							break;
			case MAX_X - 1:	x1 = j - 2;
							x2 = j + 1;
							break;
			case MAX_X:		x1 = j - 2;
							x2 = j;
							break;
			default:		x1 = j - 2;
							x2 = j + 2;
							break;
			}

			// Zaehlen, wieviele bebaute Grundstücke (Nachbarn) vorhanden sind
			for (int x = x1; x <= x2; x++)
			{
				nachbarn = nachbarn + Welt[y][x];
			}
			// Anhand der Anzahl der Nachbarn (gerade oder ungerade) entscheiden, 
			// ob Zelle mit 1 oder 0 belegt wird (außer bei 0 Nachbarn)
			
			if (nachbarn == 0)
			{
				Welt[i][j] = 0;
			}
			else
			{
				Welt[i][j] = !(nachbarn % 2);
			}
		}
	}

	// Auswertung & Ausgabe auf Console:
	printf("\n");
	for (int i = MIN_Y; i <= MAX_Y; i++)
	{
		printf("%d.\t", (i + 1));
		for (int j = MIN_X; j <= MAX_X; j++)
		{
			if (Welt[i][j] == 0)
			{
				printf("|   |");
			}
			else
			{
				printf("| x |");
			}
		}
		printf("\n");
	}
}

